package com.lsh.service.impl;

import com.alibaba.dubbo.config.annotation.Reference;
import com.lsh.entity.User;
import com.lsh.service.ClientServer;
import com.lsh.service.UserService;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * @author ：LiuShihao
 * @date ：Created in 2021/3/8 1:51 下午
 * @desc ：@Reference 是com.alibaba.dubbo.config.annotation.Reference包下的注解
 */
@Component("ClientServer")
public class ClientServerImpl implements ClientServer {
    /**
     * 这个注解是dubbo下的，这里的userService是在zookeeper注册中心取到的
     * Reference注解引用服务 ，声明需要调用的远程服务的接口，生成远程服务代理
     * timeout  int类型  单位是毫秒
     * check   Boolean  没有提供者时报错是否报错
     * retries   重试次数  不包括第一次调用次数
     * loadbalance  指定负载均衡方式 random随机、roundrobin 轮询
     * 使用url参数  可以绕过zookeeper注册中心使用dubbo直连的方式
     * 注意：如果服务提供端指定了版本号，服务调用端也需要指定版本号version
     * 2.7后@Reference注解被弃用，使用@DubboReference
     */
//    @Reference(timeout = 3000,retries = 3,url = "127.0.0.1:20880",version = "1.0.0")
    @Reference
//    @DubboReference
    UserService userService;

    @Override
    public List<User> findAll() {
        long start = System.currentTimeMillis();
        List<User> all = userService.findAll();
        long end = System.currentTimeMillis();
        System.out.println("调用UserService接口耗时："+(end-start)+"ms");
        return all;
    }

    @Override
    public void addUser(User user) {

        userService.addUser(user);
    }

    @Override
    public void updateUser(User user) {
        userService.updateUser(user);
    }

    @Override
    public void delUser(int id) {
        userService.delUser(id);
    }

    @Override
    public User findById(Integer id) {
        return userService.findById(id);
    }
}
